/***********************************************************************************************************************
 * ############################################# Application AdewebLite #############################################
 * AdewebLite Android est une application permettant de consulter des emplois du temps fournis par l'université UHP
 * avec ou sans connexion internet (informations gardées en mémoire à chaque synchronisation). Et utilisant la web
 * API ADE pour collecter les données.
 * @author Andrianjafintrimo Victor, Zanette Sébastien
 * 
 * Basée sur l'application du même nom, utilisant le flux RSS (données à traiter), de :
 * @author Schnell Michaël, Zanette Sébastien
 * **********************************************************************************************************************
 */

package ade.schedule;

import java.util.ArrayList;
import ade.database.Database;
import ade.exception.AAAException;

public abstract class ScheduleUpdater {

	protected ArrayList<Lesson> insert ; //Nouveaux cours à inserer

	protected ArrayList<Lesson> update ; //Cours modifiés à modifier

	protected ArrayList<Lesson> delete ; //Cours à supprimer

	/**
	 * Initialise <code>ScheduleUpdater</code>
	 */
	protected ScheduleUpdater() {
		super() ;
	}// ScheduleUpdater()
	
        /**
         * Initialise les champs liste dans lesquel on stoquera les cours triés (nouveau, modifié, supprimé).
         */
	protected void initialize () {
		this.insert = new ArrayList<Lesson>() ;
		this.update = new ArrayList<Lesson>() ;
		this.delete = new ArrayList<Lesson>() ;
	}// initialize()
	
	/**
	 * Comparaison de 2 emplois du temps.
	 * @param oldS ancien emploi du temps
	 * @param newS emploi du temps récupéré
	 */
	public void compare (Schedule oldS, Schedule newS) {
		this.initialize() ;
		this.compareS(oldS, newS) ;
	}// compare(Schedule, Schedule) 
	
	/**
	 * Comparaison de 2 emplois du temps.
	 * @param oldS
	 * @param newS
	 */
	protected abstract void compareS (Schedule oldS, Schedule newS) ;
	
        /**
         * Insère dans la base de données les cours de la liste de nouveaux cours.
         * @throws AAAException 
         */
	public void insert () throws AAAException {
		if (this.insert.isEmpty()) {
			return ; // No rows to insert
		}// if
		Database db = new Database() ;
		db.insertLessons(this.insert) ;
	}// insert()
	
        /**
         * Met à jour dans la base de données les cours de la liste de cours modifiés.
         * @throws AAAException 
         */
	public void update () throws AAAException  {
		if (this.update.isEmpty()) {
			return ; // No rows to update
		}// if
		Database db = new Database() ; ;
		db.updateLessons(this.update) ;
	}// update()
	
        /**
         * Supprime de la base de données les cours de la liste de cours à supprimés.
         * @throws AAAException 
         */
	public void delete () throws AAAException  {
		if (this.delete.isEmpty()) {
			return ; // No rows to delete
		}// if
		Database db = new Database() ;
		db.deleteLessons(this.delete, this.delete.get(0).getSchedule()) ;
	}// delete()
	
        /**
         * Insère, met à jour et supprime les cours de la base de données.
         * @throws AAAException 
         */
	public void updateSchedule () throws AAAException {
		this.delete() ;
		this.update() ;
		this.insert() ;
	}// updateSchedule()
	
}
